; void liberar_arbol(nodo_arbol_t *a)

%include "macros/nodo_arbol_t.mac"

extern free

global liberar_arbol

section .text

%define ptr_nodo_arbol [ebp + 8]

liberar_arbol:
	push ebp
	mov	ebp, esp
	push esi
	push edi
	push ebx
	
	mov	eax, ptr_nodo_arbol		; Vemos si el puntero es null no seguimos.
	cmp	eax, 0
	je fin
	
	cmp	dword [eax + off_ptr_izq_na], 0		; Vemos si nodo izquierdo es null.
	je	termine_izq
	push eax
	push dword [eax + off_ptr_izq_na]
	call liberar_arbol
	add esp, 4
	pop	eax
	
termine_izq:
	cmp dword [eax + off_ptr_der_na], 0		; Vemos si nodo derecho es null.
	je termine_der
	push eax
	push dword [eax + off_ptr_der_na]
	call liberar_arbol
	add esp, 4
	pop eax
	
termine_der:
	push eax					; Eliminamos el nodo actual.
	call free
	add	esp, 4
	
fin:
	pop ebx
	pop edi
	pop esi
	pop ebp
	ret
		
